package com.meida.common.mybatis.base.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.meida.common.mybatis.entity.EntityMap;
import com.meida.common.mybatis.model.*;
import com.meida.common.mybatis.query.CriteriaQuery;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * @author zyf
 */
public interface IBaseService<T> extends IService<T> {

    /**
     * 查询列表
     *
     * @param listModel
     * @return
     */
    ResultBody listEntityMap(ListModel listModel);

    ResultBody listEntityMap(Map map);

    /**
     * 自定义分页(xml中配置外键链接查询)
     *
     * @param pageModel
     * @return
     */
    ResultBody pageList(PageModel pageModel);

    /**
     * 自定义分页(xml中配置外键链接查询)
     *
     * @param map
     * @return
     */
    ResultBody pageList(Map map);


    /**
     * 自定义更新带扩展事件
     */
    ResultBody edit(UpdateModel updateModel);

    /**
     * 自定义更新带扩展事件
     */
    ResultBody edit(Map map);

    ResultBody add(SaveModel model);

    ResultBody add(Map map);


    ResultBody delete(Map map);

    ResultBody delete(DeleteModel model);

    /**
     * 自定义查询单个实体(返回自定义Map类型,便于枚举转换)
     */
    ResultBody get(GetModel model);

    ResultBody get(Map map);


    List<EntityMap> selectEntityMap(CriteriaQuery<?> cq);

    EntityMap findOne(CriteriaQuery cq);

    EntityMap findOne(Serializable id);

    T getByProperty(String propertyName, Object value);

    /**
     * 设置状态
     *
     * @param state
     * @return
     */
    ResultBody setState(Map map, String fieldName, Integer state);


}
